package servidor;

import javax.swing.JPanel;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;

import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JLabel;

import java.awt.Color;

import javax.swing.SwingConstants;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import clasesBasicas.Usuario;


public class PanelPrincipal extends JPanel {

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JTable tabla;
	private ModeloTabla dtm;
	private JButton btnDesconectarUsuario = new JButton("Desconectar Usuario");
	private JButton btnConexiones = new JButton("Establecer Max. Conexiones");
	private JButton btnUsuarios = new JButton("Lista Usuarios");
	private JButton btnEditarVariables = new JButton("Gesti�n de Variables");
	private ArrayList<Usuario> mUsCon;
	public JLabel lblConex;
	
	//Guarda el nombre de usurio seleccionado, en caso de que se quiera desconectarlo.
	private String usuarioADesconectar;

	/**
	 * Create the panel.
	 */
	public PanelPrincipal() {
		setLayout(null);
		
		
		btnConexiones.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				VentanaMaxConexiones vMaxCon = new VentanaMaxConexiones();
			}
		});
		btnConexiones.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnConexiones.setBounds(20, 43, 212, 31);
		add(btnConexiones);
		
		
		btnUsuarios.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				VentanaServidor.irPanelUsuarios();
			}
		});
		btnUsuarios.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnUsuarios.setBounds(250, 43, 140, 31);
		add(btnUsuarios);
		
		JLabel lblUsuariosConectados = new JLabel("USUARIOS CONECTADOS");
		lblUsuariosConectados.setHorizontalAlignment(SwingConstants.CENTER);
		lblUsuariosConectados.setForeground(Color.BLUE);
		lblUsuariosConectados.setFont(new Font("Times New Roman", Font.BOLD | Font.ITALIC, 14));
		lblUsuariosConectados.setBounds(128, 83, 333, 31);
		add(lblUsuariosConectados);
		
		
		
		btnDesconectarUsuario.setBackground(Color.YELLOW);
		btnDesconectarUsuario.setForeground(Color.RED);
		btnDesconectarUsuario.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnDesconectarUsuario.setBounds(200, 423, 200, 31);
		btnDesconectarUsuario.setEnabled(false);
		add(btnDesconectarUsuario);
		btnEditarVariables.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VentanaServidor.irPanelVariables();
			}
		});
		
		
		btnEditarVariables.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnEditarVariables.setBounds(405, 44, 170, 31);
		add(btnEditarVariables);
		
		JScrollPane scrollPaneUsConect = new JScrollPane();
		scrollPaneUsConect.setBounds(62, 125, 480, 270);
		add(scrollPaneUsConect);
		
		
		
		String[] columnas = {"Nombre", "Id_Usuario"};
		
		mUsCon = VentanaServidor.bdUsers.obtenerUsuariosConectados();
		
		String[][] datos = new String[mUsCon.size()][2];
		
		for (int i = 0; i < mUsCon.size(); i++) 
		{
			Usuario u = mUsCon.get(i);
			
			//inserto los datos
			datos[i][0] = u.getNombre();
			datos[i][1] = u.getUserName();
		}
		tabla = new JTable();
		tabla.setGridColor(new Color(0, 0, 0));
		tabla.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		tabla.setPreferredSize(new Dimension(600,350));
		tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabla.setFont(new Font("Tahoma", Font.ROMAN_BASELINE, 16));
		scrollPaneUsConect.setViewportView(tabla);
		
		DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
		tcr.setHorizontalAlignment(SwingConstants.CENTER);
		
		dtm = new ModeloTabla(datos, columnas);
		tabla.setModel(dtm);
		
		JLabel lblConexionesMaximas = new JLabel("Conexiones m\u00E1ximas: ");
		lblConexionesMaximas.setForeground(Color.MAGENTA);
		lblConexionesMaximas.setFont(new Font("Times New Roman", Font.BOLD, 14));
		lblConexionesMaximas.setHorizontalAlignment(SwingConstants.CENTER);
		lblConexionesMaximas.setBounds(20, 11, 180, 21);
		add(lblConexionesMaximas);
		
		lblConex = new JLabel(Servidor.conexinesMaximas+"");
		lblConex.setForeground(Color.RED);
		lblConex.setHorizontalAlignment(SwingConstants.CENTER);
		lblConex.setFont(new Font("Times New Roman", Font.BOLD, 14));
		lblConex.setBounds(204, 12, 46, 21);
		add(lblConex);
		for(int i = 0;i < 2; i ++ ){
		
			tabla.getColumnModel().getColumn(i).setCellRenderer(tcr);
		}
		
		btnDesconectarUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				usuarioADesconectar = mUsCon.get(tabla.getSelectedRow()).getUserName();
				VentanaServidor.bdUsers.desconectarUsuario(usuarioADesconectar);
				String user=mUsCon.get(tabla.getSelectedRow()).getUserName();
				System.out.println("Usuario desconectado: " +  user);
				dtm.removeRow(tabla.getSelectedRow());
				tabla.repaint();
				int i;
				System.out.println("Hilos totales: "+Servidor.hilosTotales.size());
				System.out.println("Runnable totales: "+Servidor.runnablesTotales.size());
				for(i=0; i<Servidor.hilosTotales.size();i++)
				{
				Thread temp=Servidor.hilosTotales.get(i);
					if(temp.getName().equals(user))
					{
						break;
					}
				}
				GestorPeticion r= (GestorPeticion) Servidor.runnablesTotales.remove(i);
				r.cerrarRunnable();
				Thread temp=Servidor.hilosTotales.remove(i);
				temp.stop();
				
			}
		});
		
		tabla.addMouseListener(new MouseAdapter() {

			public void mousePressed(MouseEvent e){
				
				if(tabla.getSelectedRow()!=-1)
				{
					btnDesconectarUsuario.setEnabled(true);
					
				}

			}
		});
	}
	public void actualizarTabla()
	{
		String[] columnas = {"Nombre", "Id_Usuario"};
		
		mUsCon = VentanaServidor.bdUsers.obtenerUsuariosConectados();
		
		String[][] datos = new String[mUsCon.size()][2];
		
		for (int i = 0; i < mUsCon.size(); i++) 
		{
			Usuario u = mUsCon.get(i);
			
			//inserto los datos
			datos[i][0] = u.getNombre();
			datos[i][1] = u.getUserName();
		}
		
		dtm = new ModeloTabla(datos, columnas);
		tabla.setModel(dtm);
		tabla.repaint();
		
	}

	
	public class ModeloTabla extends DefaultTableModel{

		
		public ModeloTabla() {
			super();
			// TODO Auto-generated constructor stub
		}

		public ModeloTabla(Object[][] data, Object[] columnNames) {
			super(data, columnNames);
			// TODO Auto-generated constructor stub
		}

		private static final long serialVersionUID = 1L;
		
		public boolean isCellEditable(int fila,int columna){
			if(columna >= 0)
				return false;
			return true;
		}
		
	}
}
